//给你一个字符串 s ，请找出满足每个字符最多出现两次的最长子字符串，并返回该子字符串的 最大 长度。 
//
// 
//
// 示例 1： 
//
// 
// 输入： s = "bcbbbcba" 
// 
//
// 输出： 4 
//
// 解释： 
//
// 以下子字符串长度为 4，并且每个字符最多出现两次："bcbbbcba"。 
//
// 示例 2： 
//
// 
// 输入： s = "aaaa" 
// 
//
// 输出： 2 
//
// 解释： 
//
// 以下子字符串长度为 2，并且每个字符最多出现两次："aaaa"。 
//
// 
//
// 提示： 
//
// 
// 
// 2 <= s.length <= 100 
// 
// s 仅由小写英文字母组成。 
// 
//
// Related Topics 哈希表 字符串 滑动窗口 👍 29 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
	public int maximumLengthSubstring(String s) {
		// 哈希表中 ++ 的时候判断，如果 >= 3 那么就 left需要收回
		// 哈希表中 ++ 时， <= 2 那么right继续
		// k(滑动窗口长度)不固定 求k最大
		int[] dp = new int[26];//只有小写英文字母
		char[] chars = s.toCharArray();// s 转换为char数组
		int left = 0;
		int maxK = 0;
		// i 作为 right
		for (int i = 0; i < chars.length; i++) {
			char c = chars[i];
			dp[c - 'a']++;
			// 不用 k 来控制循环
			// 如果 某个位置 有3个
			while (dp[c - 'a'] >= 3) {
				dp[chars[left] - 'a']--;
				left++;
			}
			maxK = Math.max(maxK, i - left + 1);
		}
		return maxK;
	}
}
//leetcode submit region end(Prohibit modification and deletion)
